Marco de datos

Para trabajar con bases de datos en R se pueden construir o cargar al software. En cualquier caso, la idea es tener un objeto data.frame que el tipo que identifica las bases de datos.


Construcción

Para construir una base de datos, se debe definir las variables que representan las columnas, y el contenido de cada variable son la representación en cada fila, es importante que todas las variables tengan el mismo tamaño para construir una base de datos consistente.

years <- 1980:2019
nombre <- sample(c("Luisa","Andrés","Camilo","Natalia"),
                 size = 40,replace = T)
peso <- round(rnorm(40,60,5),2)
estatura <- ifelse(nombre=="Luisa",1.56,
                   ifelse(nombre=="Andrés",1.78,
                          ifelse(nombre=="Camilo",1.70,1.68)))
imc <- round(peso/estatura^2,2)

Cada variable está asignada de manera independiente, aún no es una base de datos. Para que cumpla con la condición de base de datos es necesario que cada fila de cada variable represente una medición, es decir, si la primera posición del nombre es Camilo entonces las primera posición de las variables year, peso, estatura y imc deben corresponder a Camilo.

Para construir la base de datos, se usa el comando data.frame.

args(data.frame)
## function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, 
##     fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors()) 
## NULL
(datos <- data.frame(years, nombre, peso, estatura, imc))
##    years  nombre  peso estatura   imc
## 1   1980  Camilo 61.56     1.70 21.30
## 2   1981   Luisa 55.17     1.56 22.67
## 3   1982   Luisa 53.05     1.56 21.80
## 4   1983 Natalia 66.76     1.68 23.65
## 5   1984 Natalia 63.24     1.68 22.41
## 6   1985  Camilo 53.00     1.70 18.34
## 7   1986   Luisa 58.92     1.56 24.21
## 8   1987   Luisa 57.95     1.56 23.81
## 9   1988 Natalia 62.98     1.68 22.31
## 10  1989  Camilo 57.79     1.70 20.00
## 11  1990  Camilo 59.28     1.70 20.51
## 12  1991  Camilo 58.95     1.70 20.40
## 13  1992 Natalia 64.13     1.68 22.72
## 14  1993  Camilo 59.61     1.70 20.63
## 15  1994   Luisa 57.23     1.56 23.52
## 16  1995  Camilo 59.10     1.70 20.45
## 17  1996  Camilo 56.36     1.70 19.50
## 18  1997 Natalia 63.78     1.68 22.60
## 19  1998  Camilo 66.65     1.70 23.06
## 20  1999  Camilo 59.55     1.70 20.61
## 21  2000  Camilo 69.79     1.70 24.15
## 22  2001  Camilo 53.22     1.70 18.42
## 23  2002 Natalia 56.80     1.68 20.12
## 24  2003 Natalia 67.47     1.68 23.91
## 25  2004  Andrés 59.04     1.78 18.63
## 26  2005  Camilo 65.44     1.70 22.64
## 27  2006  Andrés 59.88     1.78 18.90
## 28  2007   Luisa 59.94     1.56 24.63
## 29  2008  Andrés 53.70     1.78 16.95
## 30  2009   Luisa 59.27     1.56 24.35
## 31  2010 Natalia 67.78     1.68 24.02
## 32  2011 Natalia 64.49     1.68 22.85
## 33  2012  Andrés 61.36     1.78 19.37
## 34  2013  Camilo 57.88     1.70 20.03
## 35  2014  Andrés 61.12     1.78 19.29
## 36  2015   Luisa 56.99     1.56 23.42
## 37  2016 Natalia 58.96     1.68 20.89
## 38  2017 Natalia 67.77     1.68 24.01
## 39  2018  Andrés 60.94     1.78 19.23
## 40  2019  Andrés 62.58     1.78 19.75
str(datos)
## 'data.frame':    40 obs. of  5 variables:
##  $ years   : int  1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 ...
##  $ nombre  : Factor w/ 4 levels "Andrés","Camilo",..: 2 3 3 4 4 2 3 3 4 2 ...
##  $ peso    : num  61.6 55.2 53 66.8 63.2 ...
##  $ estatura: num  1.7 1.56 1.56 1.68 1.68 1.7 1.56 1.56 1.68 1.7 ...
##  $ imc     : num  21.3 22.7 21.8 23.6 22.4 ...

Con la base de datos creada se puede manipular más fácil, para ingresar a las filas y columnas se trabaja similar a las matrices.

datos[,1]
##  [1] 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994
## [16] 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
## [31] 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
datos[,"nombre"]
##  [1] Camilo  Luisa   Luisa   Natalia Natalia Camilo  Luisa   Luisa   Natalia
## [10] Camilo  Camilo  Camilo  Natalia Camilo  Luisa   Camilo  Camilo  Natalia
## [19] Camilo  Camilo  Camilo  Camilo  Natalia Natalia Andrés  Camilo  Andrés 
## [28] Luisa   Andrés  Luisa   Natalia Natalia Andrés  Camilo  Andrés  Luisa  
## [37] Natalia Natalia Andrés  Andrés 
## Levels: Andrés Camilo Luisa Natalia
datos[8:24,]
##    years  nombre  peso estatura   imc
## 8   1987   Luisa 57.95     1.56 23.81
## 9   1988 Natalia 62.98     1.68 22.31
## 10  1989  Camilo 57.79     1.70 20.00
## 11  1990  Camilo 59.28     1.70 20.51
## 12  1991  Camilo 58.95     1.70 20.40
## 13  1992 Natalia 64.13     1.68 22.72
## 14  1993  Camilo 59.61     1.70 20.63
## 15  1994   Luisa 57.23     1.56 23.52
## 16  1995  Camilo 59.10     1.70 20.45
## 17  1996  Camilo 56.36     1.70 19.50
## 18  1997 Natalia 63.78     1.68 22.60
## 19  1998  Camilo 66.65     1.70 23.06
## 20  1999  Camilo 59.55     1.70 20.61
## 21  2000  Camilo 69.79     1.70 24.15
## 22  2001  Camilo 53.22     1.70 18.42
## 23  2002 Natalia 56.80     1.68 20.12
## 24  2003 Natalia 67.47     1.68 23.91
datos[,c(1,3,5)]
##    years  peso   imc
## 1   1980 61.56 21.30
## 2   1981 55.17 22.67
## 3   1982 53.05 21.80
## 4   1983 66.76 23.65
## 5   1984 63.24 22.41
## 6   1985 53.00 18.34
## 7   1986 58.92 24.21
## 8   1987 57.95 23.81
## 9   1988 62.98 22.31
## 10  1989 57.79 20.00
## 11  1990 59.28 20.51
## 12  1991 58.95 20.40
## 13  1992 64.13 22.72
## 14  1993 59.61 20.63
## 15  1994 57.23 23.52
## 16  1995 59.10 20.45
## 17  1996 56.36 19.50
## 18  1997 63.78 22.60
## 19  1998 66.65 23.06
## 20  1999 59.55 20.61
## 21  2000 69.79 24.15
## 22  2001 53.22 18.42
## 23  2002 56.80 20.12
## 24  2003 67.47 23.91
## 25  2004 59.04 18.63
## 26  2005 65.44 22.64
## 27  2006 59.88 18.90
## 28  2007 59.94 24.63
## 29  2008 53.70 16.95
## 30  2009 59.27 24.35
## 31  2010 67.78 24.02
## 32  2011 64.49 22.85
## 33  2012 61.36 19.37
## 34  2013 57.88 20.03
## 35  2014 61.12 19.29
## 36  2015 56.99 23.42
## 37  2016 58.96 20.89
## 38  2017 67.77 24.01
## 39  2018 60.94 19.23
## 40  2019 62.58 19.75
datos[,c("years","imc")]
##    years   imc
## 1   1980 21.30
## 2   1981 22.67
## 3   1982 21.80
## 4   1983 23.65
## 5   1984 22.41
## 6   1985 18.34
## 7   1986 24.21
## 8   1987 23.81
## 9   1988 22.31
## 10  1989 20.00
## 11  1990 20.51
## 12  1991 20.40
## 13  1992 22.72
## 14  1993 20.63
## 15  1994 23.52
## 16  1995 20.45
## 17  1996 19.50
## 18  1997 22.60
## 19  1998 23.06
## 20  1999 20.61
## 21  2000 24.15
## 22  2001 18.42
## 23  2002 20.12
## 24  2003 23.91
## 25  2004 18.63
## 26  2005 22.64
## 27  2006 18.90
## 28  2007 24.63
## 29  2008 16.95
## 30  2009 24.35
## 31  2010 24.02
## 32  2011 22.85
## 33  2012 19.37
## 34  2013 20.03
## 35  2014 19.29
## 36  2015 23.42
## 37  2016 20.89
## 38  2017 24.01
## 39  2018 19.23
## 40  2019 19.75

cargar base de datos

R maneja casi cualquier tipo de archivo de bases de datos, pero su formato de creación de base de datos es .Rds o .RData, en el paquete base y utilsexiste una colección de funciones para leer marcos de datos.

## [1] "read.dcf"     "readBin"      "readChar"     "readline"     "readLines"   
## [6] "readRDS"      "readRenviron" "Sys.readlink"
##  [1] "read.csv"         "read.csv2"        "read.delim"       "read.delim2"     
##  [5] "read.DIF"         "read.fortran"     "read.fwf"         "read.socket"     
##  [9] "read.table"       "readCitationFile" "readClipboard"    "readRegistry"

Para cargar otras extensiones de bases de datos es necesario utilizar paquetes.

# Para otros Software de estadística (Minitab, SAS, Stata, SPSS)
install.packages("haven",dependencies = T)
install.packages("foreign",dependencies = T)

# Archivos de excel
install.packages("xlsx",dependencies = T) # Requiere Java
install.packages("readxl",dependencies = T)
install.packages("openxlsx",dependencies = T)

# SQL
install.packages("sqldf",dependencies = T)

Para trabajar con SQL en R se recomienda leer el artículo de Josh Errickson y las notas de Data Carpentry.

La base de datos de el ICFES 2015-02 está disponible en Excel, todos los ejemplos que acontinuación se muestran se trabajan con esta base de datos.

library(xlsx)
library(readxl)
library(openxlsx)

Icfes <- read.csv("ICFES20152.csv",sep = ",")

Si el archivo tiene la extensión .xlsx se utiliza los siguientes comandos:

# Con xlsx
Icfes <- read.xlsx(file = "ICFES20152.xlsx",sheetName = 1,encoding = "UTF-8")
Icfes <- read.xlsx2(file = "ICFES20152.xls",sheetIndex = 1)

# Con readxl
Icfes <- read_xlsx(path = "ICFES20152.xlsx")

# Con openxlsx
Icfes <- read.xlsx(file = "ICFES20152.xlsx",sheet = 1)

Para cargar los archivos de esta manera es necesario que se encuentren alojados en la carpeta de trabajo que puede verificar con el comand getwd(), y para asignar una nuava ruta se utiliza el comando setwd(). Una función muy útil para buscar carpetas es choose.dir(), y para seleccionar una archivo específico file.choose().

# CSV
Icfes <- read.csv(file.choose(),sep = ",")

# Con xlsx
Icfes <- read.xlsx(file = file.choose(),sheetName = 1,encoding = "UTF-8")
Icfes <- read.xlsx2(file = file.choose(),sheetIndex = 1)

# Con readxl
Icfes <- read_xlsx(path = file.choose())

# Con openxlsx
Icfes <- read.xlsx(file = file.choose(),sheet = 1)
Icfes
## # A tibble: 12,162 x 24
##    CODINST NOMBREINSTITUCI~ CODIGOMUNICIPIO NOMBREMUNICIPIO DEPARTAMENTO
##    <chr>   <chr>            <chr>           <chr>           <chr>       
##  1 142133  I.E. INTERNADO ~ 91263           EL ENCANTO      AMAZONAS    
##  2 087445  I.E. COLEGIO IN~ 91405           LA CHORRERA     AMAZONAS    
##  3 117127  I.E. INTERNADO ~ 91407           LA PEDRERA      AMAZONAS    
##  4 019109  I.E. ESCUELA NO~ 91001           LETICIA         AMAZONAS    
##  5 038919  I.E. INEM JOSE ~ 91001           LETICIA         AMAZONAS    
##  6 065482  I.E. INDIGENA S~ 91001           LETICIA         AMAZONAS    
##  7 065490  COL FEMENINO MA~ 91001           LETICIA         AMAZONAS    
##  8 087429  COL CRISTO REY   91001           LETICIA         AMAZONAS    
##  9 093229  I.E. COLEGIO TE~ 91001           LETICIA         AMAZONAS    
## 10 117358  I.E. SAGRADO CO~ 91001           LETICIA         AMAZONAS    
## # ... with 12,152 more rows, and 19 more variables: CALENDARIO <chr>,
## #   NATURALEZA <chr>, JORNADA <chr>, EVALUADOS <dbl>, PROMLECTURACRITICA <dbl>,
## #   PROMMATEMATICA <dbl>, PROMSOCIALESYCIUDADANAS <dbl>,
## #   PROMCIENCIASNATURALES <dbl>, PROMINGLES <dbl>,
## #   PROMRAZONAMIENTOCUANTITA <dbl>, PROMCOMPETENCIASCIUDADAN <dbl>,
## #   DESVLECTURACRITICA <dbl>, DESVMATEMATICA <dbl>,
## #   DESVSOCIALESYCIUDADANAS <dbl>, DESVCIENCIASNATURALES <dbl>,
## #   DESVINGLES <dbl>, DESVRAZONAMIENTOCUANTITA <dbl>,
## #   DESVCOMPETENCIASCIUDADAN <dbl>, PERIODO <chr>
dim(Icfes)
## [1] 12162    24
length(Icfes)
## [1] 24
names(Icfes)
##  [1] "CODINST"                  "NOMBREINSTITUCION"       
##  [3] "CODIGOMUNICIPIO"          "NOMBREMUNICIPIO"         
##  [5] "DEPARTAMENTO"             "CALENDARIO"              
##  [7] "NATURALEZA"               "JORNADA"                 
##  [9] "EVALUADOS"                "PROMLECTURACRITICA"      
## [11] "PROMMATEMATICA"           "PROMSOCIALESYCIUDADANAS" 
## [13] "PROMCIENCIASNATURALES"    "PROMINGLES"              
## [15] "PROMRAZONAMIENTOCUANTITA" "PROMCOMPETENCIASCIUDADAN"
## [17] "DESVLECTURACRITICA"       "DESVMATEMATICA"          
## [19] "DESVSOCIALESYCIUDADANAS"  "DESVCIENCIASNATURALES"   
## [21] "DESVINGLES"               "DESVRAZONAMIENTOCUANTITA"
## [23] "DESVCOMPETENCIASCIUDADAN" "PERIODO"
head(Icfes,n = 3)
## # A tibble: 3 x 24
##   CODINST NOMBREINSTITUCI~ CODIGOMUNICIPIO NOMBREMUNICIPIO DEPARTAMENTO
##   <chr>   <chr>            <chr>           <chr>           <chr>       
## 1 142133  I.E. INTERNADO ~ 91263           EL ENCANTO      AMAZONAS    
## 2 087445  I.E. COLEGIO IN~ 91405           LA CHORRERA     AMAZONAS    
## 3 117127  I.E. INTERNADO ~ 91407           LA PEDRERA      AMAZONAS    
## # ... with 19 more variables: CALENDARIO <chr>, NATURALEZA <chr>,
## #   JORNADA <chr>, EVALUADOS <dbl>, PROMLECTURACRITICA <dbl>,
## #   PROMMATEMATICA <dbl>, PROMSOCIALESYCIUDADANAS <dbl>,
## #   PROMCIENCIASNATURALES <dbl>, PROMINGLES <dbl>,
## #   PROMRAZONAMIENTOCUANTITA <dbl>, PROMCOMPETENCIASCIUDADAN <dbl>,
## #   DESVLECTURACRITICA <dbl>, DESVMATEMATICA <dbl>,
## #   DESVSOCIALESYCIUDADANAS <dbl>, DESVCIENCIASNATURALES <dbl>,
## #   DESVINGLES <dbl>, DESVRAZONAMIENTOCUANTITA <dbl>,
## #   DESVCOMPETENCIASCIUDADAN <dbl>, PERIODO <chr>
tail(Icfes,n = 3)
## # A tibble: 3 x 24
##   CODINST NOMBREINSTITUCI~ CODIGOMUNICIPIO NOMBREMUNICIPIO DEPARTAMENTO
##   <chr>   <chr>            <chr>           <chr>           <chr>       
## 1 135020  JOSÉ CELESTINO ~ 99001           PUERTO CARREÑO  VICHADA     
## 2 167981  I.E. MARIA INMA~ 99001           PUERTO CARREÑO  VICHADA     
## 3 037440  I.E. INTERNADO ~ 99624           SANTA ROSALIA   VICHADA     
## # ... with 19 more variables: CALENDARIO <chr>, NATURALEZA <chr>,
## #   JORNADA <chr>, EVALUADOS <dbl>, PROMLECTURACRITICA <dbl>,
## #   PROMMATEMATICA <dbl>, PROMSOCIALESYCIUDADANAS <dbl>,
## #   PROMCIENCIASNATURALES <dbl>, PROMINGLES <dbl>,
## #   PROMRAZONAMIENTOCUANTITA <dbl>, PROMCOMPETENCIASCIUDADAN <dbl>,
## #   DESVLECTURACRITICA <dbl>, DESVMATEMATICA <dbl>,
## #   DESVSOCIALESYCIUDADANAS <dbl>, DESVCIENCIASNATURALES <dbl>,
## #   DESVINGLES <dbl>, DESVRAZONAMIENTOCUANTITA <dbl>,
## #   DESVCOMPETENCIASCIUDADAN <dbl>, PERIODO <chr>
str(Icfes)
## tibble [12,162 x 24] (S3: tbl_df/tbl/data.frame)
##  $ CODINST                 : chr [1:12162] "142133" "087445" "117127" "019109" ...
##  $ NOMBREINSTITUCION       : chr [1:12162] "I.E. INTERNADO SAN RAFAEL DEL CARAPARANA - SEDE PRINCIPAL" "I.E. COLEGIO INDIGENA CASA DEL CONOCIMIENTO - SEDE PRINCIPAL" "I.E. INTERNADO INDIGENA SAN JOSÉ - SEDE PRINCIPAL" "I.E. ESCUELA NORMAL SUPERIOR MARCELIANO EDUARDO CANYES SANTACANA - SEDE PRINCIPAL" ...
##  $ CODIGOMUNICIPIO         : chr [1:12162] "91263" "91405" "91407" "91001" ...
##  $ NOMBREMUNICIPIO         : chr [1:12162] "EL ENCANTO" "LA CHORRERA" "LA PEDRERA" "LETICIA" ...
##  $ DEPARTAMENTO            : chr [1:12162] "AMAZONAS" "AMAZONAS" "AMAZONAS" "AMAZONAS" ...
##  $ CALENDARIO              : chr [1:12162] "A" "A" "A" "A" ...
##  $ NATURALEZA              : chr [1:12162] "OFICIAL" "OFICIAL" "OFICIAL" "OFICIAL" ...
##  $ JORNADA                 : chr [1:12162] "MAÑANA" "MAÑANA" "COMPLETA U ORDINARIA" "MAÑANA" ...
##  $ EVALUADOS               : num [1:12162] 21 38 31 89 134 75 14 18 45 61 ...
##  $ PROMLECTURACRITICA      : num [1:12162] 42.5 40.1 39.9 49.9 45.9 ...
##  $ PROMMATEMATICA          : num [1:12162] 42 40.2 39.5 47.6 44 ...
##  $ PROMSOCIALESYCIUDADANAS : num [1:12162] 43.7 41.3 38.8 50.3 47 ...
##  $ PROMCIENCIASNATURALES   : num [1:12162] 44.2 41.8 42.7 49.5 46.5 ...
##  $ PROMINGLES              : num [1:12162] 46 43.6 43.8 47.8 46.6 ...
##  $ PROMRAZONAMIENTOCUANTITA: num [1:12162] 41.8 40.3 39.7 48 45 ...
##  $ PROMCOMPETENCIASCIUDADAN: num [1:12162] 42 39 37.7 49.4 46.4 ...
##  $ DESVLECTURACRITICA      : num [1:12162] 5.78 6.01 5.98 7.94 7.88 6.22 6.28 9.65 6.6 8.02 ...
##  $ DESVMATEMATICA          : num [1:12162] 7.37 7.43 9.04 9.5 8.41 ...
##  $ DESVSOCIALESYCIUDADANAS : num [1:12162] 7.52 7.72 8.56 9.38 8.22 ...
##  $ DESVCIENCIASNATURALES   : num [1:12162] 5.94 5.23 5.32 6.81 6.44 ...
##  $ DESVINGLES              : num [1:12162] 6.72 4.48 5.42 7.49 6.13 ...
##  $ DESVRAZONAMIENTOCUANTITA: num [1:12162] 8.23 7.57 9.3 10.42 8.9 ...
##  $ DESVCOMPETENCIASCIUDADAN: num [1:12162] 7.1 7.27 6.77 8.95 8.24 ...
##  $ PERIODO                 : chr [1:12162] "20152" "20152" "20152" "20152" ...
class(Icfes)
## [1] "tbl_df"     "tbl"        "data.frame"
class(Icfes$NOMBREMUNICIPIO)
## [1] "character"
summary(Icfes)
##    CODINST          NOMBREINSTITUCION  CODIGOMUNICIPIO    NOMBREMUNICIPIO   
##  Length:12162       Length:12162       Length:12162       Length:12162      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  DEPARTAMENTO        CALENDARIO         NATURALEZA          JORNADA         
##  Length:12162       Length:12162       Length:12162       Length:12162      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##    EVALUADOS      PROMLECTURACRITICA PROMMATEMATICA   PROMSOCIALESYCIUDADANAS
##  Min.   :  1.00   Min.   :28.00      Min.   : 24.50   Min.   :21.00          
##  1st Qu.: 17.00   1st Qu.:44.74      1st Qu.: 43.57   1st Qu.:43.98          
##  Median : 32.00   Median :48.19      Median : 48.00   Median :48.32          
##  Mean   : 44.95   Mean   :48.66      Mean   : 48.80   Mean   :48.64          
##  3rd Qu.: 60.00   3rd Qu.:51.77      3rd Qu.: 52.63   3rd Qu.:52.59          
##  Max.   :987.00   Max.   :77.00      Max.   :100.00   Max.   :83.00          
##  PROMCIENCIASNATURALES   PROMINGLES    PROMRAZONAMIENTOCUANTITA
##  Min.   :25.00         Min.   :25.00   Min.   : 21.50          
##  1st Qu.:44.59         1st Qu.:45.27   1st Qu.: 44.05          
##  Median :48.47         Median :47.51   Median : 48.94          
##  Mean   :49.03         Mean   :49.63   Mean   : 49.67          
##  3rd Qu.:52.45         3rd Qu.:51.27   3rd Qu.: 53.95          
##  Max.   :85.95         Max.   :97.00   Max.   :100.00          
##  PROMCOMPETENCIASCIUDADAN DESVLECTURACRITICA DESVMATEMATICA  
##  Min.   :22.00            Min.   : 0.000     Min.   : 0.000  
##  1st Qu.:44.22            1st Qu.: 6.540     1st Qu.: 7.880  
##  Median :48.13            Median : 7.470     Median : 9.020  
##  Mean   :48.27            Mean   : 7.406     Mean   : 9.056  
##  3rd Qu.:51.92            3rd Qu.: 8.320     3rd Qu.:10.260  
##  Max.   :76.00            Max.   :21.920     Max.   :31.820  
##  DESVSOCIALESYCIUDADANAS DESVCIENCIASNATURALES   DESVINGLES    
##  Min.   : 0.000          Min.   : 0.000        Min.   : 0.000  
##  1st Qu.: 8.140          1st Qu.: 6.560        1st Qu.: 5.620  
##  Median : 9.060          Median : 7.580        Median : 6.840  
##  Mean   : 8.984          Mean   : 7.541        Mean   : 7.501  
##  3rd Qu.: 9.970          3rd Qu.: 8.550        3rd Qu.: 8.940  
##  Max.   :28.000          Max.   :20.510        Max.   :27.790  
##  DESVRAZONAMIENTOCUANTITA DESVCOMPETENCIASCIUDADAN   PERIODO         
##  Min.   : 0.00            Min.   : 0.000           Length:12162      
##  1st Qu.: 8.94            1st Qu.: 7.400           Class :character  
##  Median :10.30            Median : 8.240           Mode  :character  
##  Mean   :10.33            Mean   : 8.172                             
##  3rd Qu.:11.76            3rd Qu.: 9.080                             
##  Max.   :32.19            Max.   :23.330

El operador $ sirve para extraer las variables del data.frame, siepre y cuando la base de datos posea nombres.


Guardar bases de datos

## [1] "write"      "write.dcf"  "writeBin"   "writeChar"  "writeLines"
## [1] "aspell_write_personal_dictionary_file"
## [2] "write.csv"                            
## [3] "write.csv2"                           
## [4] "write.socket"                         
## [5] "write.table"                          
## [6] "writeClipboard"
## [1] "write.xlsx"  "write.xlsx2"
## [1] "write_dta" "write_sas" "write_sav" "write_xpt"
## [1] "write.arff"    "write.dbf"     "write.dta"     "write.foreign"

Funciones del tipo apply

apply() Aplica la función sobre un la marginal de un arreglo o matriz.

(m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2))
##       [,1] [,2]
##  [1,]    1   11
##  [2,]    2   12
##  [3,]    3   13
##  [4,]    4   14
##  [5,]    5   15
##  [6,]    6   16
##  [7,]    7   17
##  [8,]    8   18
##  [9,]    9   19
## [10,]   10   20
apply(m, 1, mean)
##  [1]  6  7  8  9 10 11 12 13 14 15
apply(m, 2, mean)
## [1]  5.5 15.5
apply(m, 1:2, function(x) x/2)
##       [,1] [,2]
##  [1,]  0.5  5.5
##  [2,]  1.0  6.0
##  [3,]  1.5  6.5
##  [4,]  2.0  7.0
##  [5,]  2.5  7.5
##  [6,]  3.0  8.0
##  [7,]  3.5  8.5
##  [8,]  4.0  9.0
##  [9,]  4.5  9.5
## [10,]  5.0 10.0
apply(Icfes, 2, length)
##                  CODINST        NOMBREINSTITUCION          CODIGOMUNICIPIO 
##                    12162                    12162                    12162 
##          NOMBREMUNICIPIO             DEPARTAMENTO               CALENDARIO 
##                    12162                    12162                    12162 
##               NATURALEZA                  JORNADA                EVALUADOS 
##                    12162                    12162                    12162 
##       PROMLECTURACRITICA           PROMMATEMATICA  PROMSOCIALESYCIUDADANAS 
##                    12162                    12162                    12162 
##    PROMCIENCIASNATURALES               PROMINGLES PROMRAZONAMIENTOCUANTITA 
##                    12162                    12162                    12162 
## PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA           DESVMATEMATICA 
##                    12162                    12162                    12162 
##  DESVSOCIALESYCIUDADANAS    DESVCIENCIASNATURALES               DESVINGLES 
##                    12162                    12162                    12162 
## DESVRAZONAMIENTOCUANTITA DESVCOMPETENCIASCIUDADAN                  PERIODO 
##                    12162                    12162                    12162
apply(Icfes[,9:18], 2, mean)
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                44.947788                48.655567                48.799209 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                48.636474                49.025593                49.633360 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                49.672010                48.267984                 7.406274 
##           DESVMATEMATICA 
##                 9.055529
apply(Icfes[,9:18], 2, sd)
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                43.843946                 5.573827                 7.580989 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                 6.649614                 6.260166                 7.269747 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                 8.120015                 5.730609                 1.731647 
##           DESVMATEMATICA 
##                 2.219776

by() Aplica la función sobre una división de una base de datos (data.frame) por un factor.

by(Icfes[,c(9:18)], Icfes$CALENDARIO, colMeans)
## Icfes$CALENDARIO: A
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                45.393267                48.601547                48.741677 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                48.589383                48.972063                49.514758 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                49.612257                48.229033                 7.436473 
##           DESVMATEMATICA 
##                 9.091584 
## ------------------------------------------------------------ 
## Icfes$CALENDARIO: B
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                16.685864                52.229529                52.711885 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                51.758220                52.761885                56.728743 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                53.712199                50.859634                 5.469215 
##           DESVMATEMATICA 
##                 6.880628 
## ------------------------------------------------------------ 
## Icfes$CALENDARIO: O
##                EVALUADOS       PROMLECTURACRITICA           PROMMATEMATICA 
##                47.566667                47.403333                46.788333 
##  PROMSOCIALESYCIUDADANAS    PROMCIENCIASNATURALES               PROMINGLES 
##                47.505333                46.544667                51.666667 
## PROMRAZONAMIENTOCUANTITA PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA 
##                47.733333                47.271667                 7.718667 
##           DESVMATEMATICA 
##                 8.551333

lapply() Aplica una función sobre una lista o un vector.

l <- list(a = 1:10, b = 11:20)
lapply(l, mean)
## $a
## [1] 5.5
## 
## $b
## [1] 15.5
lapply(l, sum)
## $a
## [1] 55
## 
## $b
## [1] 155
lapply(Icfes,summary)
## $CODINST
##    Length     Class      Mode 
##     12162 character character 
## 
## $NOMBREINSTITUCION
##    Length     Class      Mode 
##     12162 character character 
## 
## $CODIGOMUNICIPIO
##    Length     Class      Mode 
##     12162 character character 
## 
## $NOMBREMUNICIPIO
##    Length     Class      Mode 
##     12162 character character 
## 
## $DEPARTAMENTO
##    Length     Class      Mode 
##     12162 character character 
## 
## $CALENDARIO
##    Length     Class      Mode 
##     12162 character character 
## 
## $NATURALEZA
##    Length     Class      Mode 
##     12162 character character 
## 
## $JORNADA
##    Length     Class      Mode 
##     12162 character character 
## 
## $EVALUADOS
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00   17.00   32.00   44.95   60.00  987.00 
## 
## $PROMLECTURACRITICA
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   28.00   44.74   48.19   48.66   51.77   77.00 
## 
## $PROMMATEMATICA
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   24.50   43.57   48.00   48.80   52.63  100.00 
## 
## $PROMSOCIALESYCIUDADANAS
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   21.00   43.98   48.32   48.64   52.59   83.00 
## 
## $PROMCIENCIASNATURALES
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   25.00   44.59   48.47   49.03   52.45   85.95 
## 
## $PROMINGLES
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   25.00   45.27   47.51   49.63   51.27   97.00 
## 
## $PROMRAZONAMIENTOCUANTITA
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   21.50   44.05   48.94   49.67   53.95  100.00 
## 
## $PROMCOMPETENCIASCIUDADAN
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   22.00   44.22   48.13   48.27   51.92   76.00 
## 
## $DESVLECTURACRITICA
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   6.540   7.470   7.406   8.320  21.920 
## 
## $DESVMATEMATICA
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   7.880   9.020   9.056  10.260  31.820 
## 
## $DESVSOCIALESYCIUDADANAS
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   8.140   9.060   8.984   9.970  28.000 
## 
## $DESVCIENCIASNATURALES
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   6.560   7.580   7.541   8.550  20.510 
## 
## $DESVINGLES
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   5.620   6.840   7.501   8.940  27.790 
## 
## $DESVRAZONAMIENTOCUANTITA
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    8.94   10.30   10.33   11.76   32.19 
## 
## $DESVCOMPETENCIASCIUDADAN
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   7.400   8.240   8.172   9.080  23.330 
## 
## $PERIODO
##    Length     Class      Mode 
##     12162 character character

sapply() Aplica una función sobre una lista o un vector y si el resultado se puede simplificar en un formato más simple, lo hace.

l <- list(a = 1:10, b = 11:20)
sapply(l, mean)
##    a    b 
##  5.5 15.5
sapply(l, sum)
##   a   b 
##  55 155
sapply(Icfes,mean)
##                  CODINST        NOMBREINSTITUCION          CODIGOMUNICIPIO 
##                       NA                       NA                       NA 
##          NOMBREMUNICIPIO             DEPARTAMENTO               CALENDARIO 
##                       NA                       NA                       NA 
##               NATURALEZA                  JORNADA                EVALUADOS 
##                       NA                       NA                44.947788 
##       PROMLECTURACRITICA           PROMMATEMATICA  PROMSOCIALESYCIUDADANAS 
##                48.655567                48.799209                48.636474 
##    PROMCIENCIASNATURALES               PROMINGLES PROMRAZONAMIENTOCUANTITA 
##                49.025593                49.633360                49.672010 
## PROMCOMPETENCIASCIUDADAN       DESVLECTURACRITICA           DESVMATEMATICA 
##                48.267984                 7.406274                 9.055529 
##  DESVSOCIALESYCIUDADANAS    DESVCIENCIASNATURALES               DESVINGLES 
##                 8.984044                 7.540577                 7.500546 
## DESVRAZONAMIENTOCUANTITA DESVCOMPETENCIASCIUDADAN                  PERIODO 
##                10.327338                 8.171681                       NA

vapply() Aplica la función sobre una lista y devuelve el resultado de acuerdo a un formato indicado.

l <- list(a = 1:10, b = 11:20)
lFivenum <- vapply(l, 
                   fivenum, 
                   c(Min. = 0, "1er Cuart." = 0, 
                     Mediana = 0, "3er Cuart." = 0, Max. = 0))
class(lFivenum)
## [1] "matrix"
lFivenum
##               a    b
## Min.        1.0 11.0
## 1er Cuart.  3.0 13.0
## Mediana     5.5 15.5
## 3er Cuart.  8.0 18.0
## Max.       10.0 20.0
QuantIcfes <- vapply(Icfes[,9:23],
                     quantile,
                     c(Min. = 0, "1er Cuart." = 0,
                       Mediana = 0, "3er Cuart." = 0, Max. = 0))
t(QuantIcfes)
##                          Min. 1er Cuart. Mediana 3er Cuart.   Max.
## EVALUADOS                 1.0      17.00  32.000    60.0000 987.00
## PROMLECTURACRITICA       28.0      44.74  48.190    51.7675  77.00
## PROMMATEMATICA           24.5      43.57  48.000    52.6300 100.00
## PROMSOCIALESYCIUDADANAS  21.0      43.98  48.320    52.5900  83.00
## PROMCIENCIASNATURALES    25.0      44.59  48.470    52.4500  85.95
## PROMINGLES               25.0      45.27  47.505    51.2700  97.00
## PROMRAZONAMIENTOCUANTITA 21.5      44.05  48.935    53.9500 100.00
## PROMCOMPETENCIASCIUDADAN 22.0      44.22  48.130    51.9175  76.00
## DESVLECTURACRITICA        0.0       6.54   7.470     8.3200  21.92
## DESVMATEMATICA            0.0       7.88   9.020    10.2600  31.82
## DESVSOCIALESYCIUDADANAS   0.0       8.14   9.060     9.9700  28.00
## DESVCIENCIASNATURALES     0.0       6.56   7.580     8.5500  20.51
## DESVINGLES                0.0       5.62   6.840     8.9400  27.79
## DESVRAZONAMIENTOCUANTITA  0.0       8.94  10.300    11.7600  32.19
## DESVCOMPETENCIASCIUDADAN  0.0       7.40   8.240     9.0800  23.33

mapply() Es la versión multivariada de lapply y sapply. Aplica la función a los elementos correspondientes de múltiples listas.

l1 <- list(a = c(1:10), b = c(11:20))
l2 <- list(c = c(21:30), d = c(31:40))
mapply(sum, l1$a, l1$b, l2$c, l2$d)
##  [1]  64  68  72  76  80  84  88  92  96 100
mapply(sum, l1, l2)
##   a   b 
## 310 510
l2 <- list(c = c(21:30), d = c(31:40), z = c(31:50))
mapply(sum, l1$a, l1$b, l2$c, l2$z)
##  [1]  64  68  72  76  80  84  88  92  96 100  74  78  82  86  90  94  98 102 106
## [20] 110
with(Icfes,mapply(`-`,PROMMATEMATICA,
                  PROMRAZONAMIENTOCUANTITA)[1:30])
##  [1]  0.24 -0.08 -0.23 -0.36 -0.99  0.30 -0.50 -1.50  0.49 -1.07 -0.18  0.40
## [13] -2.30 -0.60  0.03 -0.32  3.50 -0.26  0.39 -1.76  0.68 -0.17 -0.67 -2.20
## [25] -0.87 -2.37 -0.41  0.20 -0.29 -0.68

tapply() Aplica la función sobre un vector, de acuerdo a una clasificación de la variable tipo factor.

tapply(Icfes$EVALUADOS, Icfes$JORNADA, mean)
## COMPLETA U ORDINARIA               MAÑANA                NOCHE 
##             37.73148             49.74110             34.91196 
## SABATINA - DOMINICAL                TARDE 
##             35.92033             53.13094
tapply(Icfes$PROMRAZONAMIENTOCUANTITA, Icfes$JORNADA, mean)
## COMPLETA U ORDINARIA               MAÑANA                NOCHE 
##             54.80120             49.65380             42.64660 
## SABATINA - DOMINICAL                TARDE 
##             42.56121             49.44264

Tidyverse

En el universo de tidyverse la programación vía tuberías es la principal novedad.

install.packages("dplyr",dependencies = T)
# Muestra aleatoria de resultados del ICFES
aux <- sample(dim(Icfes)[1],size = 2000)

library(dplyr)
Icfes2 <- tbl_df(Icfes[aux,])

Filtrar

Filtrar una base de datos

filter(Icfes2, DEPARTAMENTO == "ANTIOQUIA",
       NOMBREMUNICIPIO == "MEDELLIN")
## # A tibble: 63 x 24
##    CODINST NOMBREINSTITUCI~ CODIGOMUNICIPIO NOMBREMUNICIPIO DEPARTAMENTO
##    <chr>   <chr>            <chr>           <chr>           <chr>       
##  1 089821  INST EDUC ALFON~ 05001           MEDELLIN        ANTIOQUIA   
##  2 114926  INST EDUC MADRE~ 05001           MEDELLIN        ANTIOQUIA   
##  3 053595  COLEGIO EUSKADI~ 05001           MEDELLIN        ANTIOQUIA   
##  4 028019  INST EDUC CRIST~ 05001           MEDELLIN        ANTIOQUIA   
##  5 113514  INST EDUC RAFAE~ 05001           MEDELLIN        ANTIOQUIA   
##  6 000265  INST FERRINI - ~ 05001           MEDELLIN        ANTIOQUIA   
##  7 144576  INST EDUC MAEST~ 05001           MEDELLIN        ANTIOQUIA   
##  8 110825  I.E. GUADALUPAN~ 05001           MEDELLIN        ANTIOQUIA   
##  9 056796  SEC ESC PAULO VI 05001           MEDELLIN        ANTIOQUIA   
## 10 027896  INST EDUC JOSE ~ 05001           MEDELLIN        ANTIOQUIA   
## # ... with 53 more rows, and 19 more variables: CALENDARIO <chr>,
## #   NATURALEZA <chr>, JORNADA <chr>, EVALUADOS <dbl>, PROMLECTURACRITICA <dbl>,
## #   PROMMATEMATICA <dbl>, PROMSOCIALESYCIUDADANAS <dbl>,
## #   PROMCIENCIASNATURALES <dbl>, PROMINGLES <dbl>,
## #   PROMRAZONAMIENTOCUANTITA <dbl>, PROMCOMPETENCIASCIUDADAN <dbl>,
## #   DESVLECTURACRITICA <dbl>, DESVMATEMATICA <dbl>,
## #   DESVSOCIALESYCIUDADANAS <dbl>, DESVCIENCIASNATURALES <dbl>,
## #   DESVINGLES <dbl>, DESVRAZONAMIENTOCUANTITA <dbl>,
## #   DESVCOMPETENCIASCIUDADAN <dbl>, PERIODO <chr>
Icfes2 %>% filter(DEPARTAMENTO == "ANTIOQUIA",
                  NOMBREMUNICIPIO == "MEDELLIN")
## # A tibble: 63 x 24
##    CODINST NOMBREINSTITUCI~ CODIGOMUNICIPIO NOMBREMUNICIPIO DEPARTAMENTO
##    <chr>   <chr>            <chr>           <chr>           <chr>       
##  1 089821  INST EDUC ALFON~ 05001           MEDELLIN        ANTIOQUIA   
##  2 114926  INST EDUC MADRE~ 05001           MEDELLIN        ANTIOQUIA   
##  3 053595  COLEGIO EUSKADI~ 05001           MEDELLIN        ANTIOQUIA   
##  4 028019  INST EDUC CRIST~ 05001           MEDELLIN        ANTIOQUIA   
##  5 113514  INST EDUC RAFAE~ 05001           MEDELLIN        ANTIOQUIA   
##  6 000265  INST FERRINI - ~ 05001           MEDELLIN        ANTIOQUIA   
##  7 144576  INST EDUC MAEST~ 05001           MEDELLIN        ANTIOQUIA   
##  8 110825  I.E. GUADALUPAN~ 05001           MEDELLIN        ANTIOQUIA   
##  9 056796  SEC ESC PAULO VI 05001           MEDELLIN        ANTIOQUIA   
## 10 027896  INST EDUC JOSE ~ 05001           MEDELLIN        ANTIOQUIA   
## # ... with 53 more rows, and 19 more variables: CALENDARIO <chr>,
## #   NATURALEZA <chr>, JORNADA <chr>, EVALUADOS <dbl>, PROMLECTURACRITICA <dbl>,
## #   PROMMATEMATICA <dbl>, PROMSOCIALESYCIUDADANAS <dbl>,
## #   PROMCIENCIASNATURALES <dbl>, PROMINGLES <dbl>,
## #   PROMRAZONAMIENTOCUANTITA <dbl>, PROMCOMPETENCIASCIUDADAN <dbl>,
## #   DESVLECTURACRITICA <dbl>, DESVMATEMATICA <dbl>,
## #   DESVSOCIALESYCIUDADANAS <dbl>, DESVCIENCIASNATURALES <dbl>,
## #   DESVINGLES <dbl>, DESVRAZONAMIENTOCUANTITA <dbl>,
## #   DESVCOMPETENCIASCIUDADAN <dbl>, PERIODO <chr>

Seleccionar filas

Selección de posiciones específicas de una base de datos

slice(Icfes2, 100:110)
## # A tibble: 11 x 24
##    CODINST NOMBREINSTITUCI~ CODIGOMUNICIPIO NOMBREMUNICIPIO DEPARTAMENTO
##    <chr>   <chr>            <chr>           <chr>           <chr>       
##  1 024745  I.E. TEC IND JU~ 15176           CHIQUINQUIRA    BOYACA      
##  2 005074  I.E. INTEGRADO ~ 15204           COMBITA         BOYACA      
##  3 075127  I.E.A. FRAY ISI~ 19701           SANTA ROSA      CAUCA       
##  4 152801  I.E.  PADUA - S~ 68502           ONZAGA          SANTANDER   
##  5 174250  I.E.R. EL AFILA~ 86757           SAN MIGUEL      PUTUMAYO    
##  6 071548  COL. ATENEO CAL~ 17001           MANIZALES       CALDAS      
##  7 110353  UNIDAD EDUCATIV~ 50590           PUERTO RICO     META        
##  8 162016  COLEGIO AGRICOL~ 19698           SANTANDER DE Q~ CAUCA       
##  9 156919  EL TRIUNFO       73352           ICONONZO        TOLIMA      
## 10 069906  LICEO DEL PACIF~ 76109           BUENAVENTURA    VALLE       
## 11 130302  LICEO INTEGRADO~ 17001           MANIZALES       CALDAS      
## # ... with 19 more variables: CALENDARIO <chr>, NATURALEZA <chr>,
## #   JORNADA <chr>, EVALUADOS <dbl>, PROMLECTURACRITICA <dbl>,
## #   PROMMATEMATICA <dbl>, PROMSOCIALESYCIUDADANAS <dbl>,
## #   PROMCIENCIASNATURALES <dbl>, PROMINGLES <dbl>,
## #   PROMRAZONAMIENTOCUANTITA <dbl>, PROMCOMPETENCIASCIUDADAN <dbl>,
## #   DESVLECTURACRITICA <dbl>, DESVMATEMATICA <dbl>,
## #   DESVSOCIALESYCIUDADANAS <dbl>, DESVCIENCIASNATURALES <dbl>,
## #   DESVINGLES <dbl>, DESVRAZONAMIENTOCUANTITA <dbl>,
## #   DESVCOMPETENCIASCIUDADAN <dbl>, PERIODO <chr>
Icfes2 %>%
  slice(100:110)
## # A tibble: 11 x 24
##    CODINST NOMBREINSTITUCI~ CODIGOMUNICIPIO NOMBREMUNICIPIO DEPARTAMENTO
##    <chr>   <chr>            <chr>           <chr>           <chr>       
##  1 024745  I.E. TEC IND JU~ 15176           CHIQUINQUIRA    BOYACA      
##  2 005074  I.E. INTEGRADO ~ 15204           COMBITA         BOYACA      
##  3 075127  I.E.A. FRAY ISI~ 19701           SANTA ROSA      CAUCA       
##  4 152801  I.E.  PADUA - S~ 68502           ONZAGA          SANTANDER   
##  5 174250  I.E.R. EL AFILA~ 86757           SAN MIGUEL      PUTUMAYO    
##  6 071548  COL. ATENEO CAL~ 17001           MANIZALES       CALDAS      
##  7 110353  UNIDAD EDUCATIV~ 50590           PUERTO RICO     META        
##  8 162016  COLEGIO AGRICOL~ 19698           SANTANDER DE Q~ CAUCA       
##  9 156919  EL TRIUNFO       73352           ICONONZO        TOLIMA      
## 10 069906  LICEO DEL PACIF~ 76109           BUENAVENTURA    VALLE       
## 11 130302  LICEO INTEGRADO~ 17001           MANIZALES       CALDAS      
## # ... with 19 more variables: CALENDARIO <chr>, NATURALEZA <chr>,
## #   JORNADA <chr>, EVALUADOS <dbl>, PROMLECTURACRITICA <dbl>,
## #   PROMMATEMATICA <dbl>, PROMSOCIALESYCIUDADANAS <dbl>,
## #   PROMCIENCIASNATURALES <dbl>, PROMINGLES <dbl>,
## #   PROMRAZONAMIENTOCUANTITA <dbl>, PROMCOMPETENCIASCIUDADAN <dbl>,
## #   DESVLECTURACRITICA <dbl>, DESVMATEMATICA <dbl>,
## #   DESVSOCIALESYCIUDADANAS <dbl>, DESVCIENCIASNATURALES <dbl>,
## #   DESVINGLES <dbl>, DESVRAZONAMIENTOCUANTITA <dbl>,
## #   DESVCOMPETENCIASCIUDADAN <dbl>, PERIODO <chr>

Ordenar

Ordenar la base de datos

arrange(Icfes2, DEPARTAMENTO)
arrange(Icfes2, DEPARTAMENTO, NOMBREINSTITUCION)
arrange(Icfes2, desc(PROMLECTURACRITICA))
Icfes2 %>% 
  arrange(DEPARTAMENTO, desc(PROMLECTURACRITICA))

Seleccionar columnas

Seleccion de columnas

select(Icfes2, NOMBREMUNICIPIO, DEPARTAMENTO, PROMLECTURACRITICA)
rmarkdown::paged_table(select(Icfes2, NOMBREMUNICIPIO, DEPARTAMENTO, PROMLECTURACRITICA))
Icfes2 %>%
  select(NOMBREMUNICIPIO, DEPARTAMENTO, PROMLECTURACRITICA)

Unicidad

Elementos o registros únicos

distinct(select(Icfes2, DEPARTAMENTO))
## # A tibble: 32 x 1
##    DEPARTAMENTO   
##    <chr>          
##  1 HUILA          
##  2 CUNDINAMARCA   
##  3 ANTIOQUIA      
##  4 VALLE          
##  5 BOGOTA         
##  6 CALDAS         
##  7 TOLIMA         
##  8 BOYACA         
##  9 CAUCA          
## 10 NORTE SANTANDER
## # ... with 22 more rows
Icfes2 %>% 
  select(DEPARTAMENTO) %>% 
  distinct()
## # A tibble: 32 x 1
##    DEPARTAMENTO   
##    <chr>          
##  1 HUILA          
##  2 CUNDINAMARCA   
##  3 ANTIOQUIA      
##  4 VALLE          
##  5 BOGOTA         
##  6 CALDAS         
##  7 TOLIMA         
##  8 BOYACA         
##  9 CAUCA          
## 10 NORTE SANTANDER
## # ... with 22 more rows

Añadir

Adicionar una nueva columna

mutate(Icfes2,promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)
Icfes2 %>% 
  mutate(promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)
transmute(Icfes2,promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)
Icfes2 %>% 
  transmute(promTotal=(PROMLECTURACRITICA+PROMMATEMATICA+PROMINGLES)/3)

Resumir

Resumir variables o consolidar valores

summarise(Icfes2, mean(PROMMATEMATICA))
## # A tibble: 1 x 1
##   `mean(PROMMATEMATICA)`
##                    <dbl>
## 1                   48.7
Icfes2 %>% 
  summarise(mean(PROMMATEMATICA))
## # A tibble: 1 x 1
##   `mean(PROMMATEMATICA)`
##                    <dbl>
## 1                   48.7

Agrupar

Agrupación

group_by(Icfes2, DEPARTAMENTO)
Icfes2 %>% 
  group_by(DEPARTAMENTO)

Múltiples operaciones

Combinación de “verbos” en base de datos

agrupados_deptos <- group_by(Icfes2, DEPARTAMENTO)
promedio_depto <- summarise(agrupados_deptos, mean(PROMMATEMATICA))
promedio_depto

Mediante encadenamiento de verbos

Icfes2 %>% 
  group_by(DEPARTAMENTO) %>% 
  summarise(promedio=mean(PROMMATEMATICA))
Icfes2 %>% 
  group_by(DEPARTAMENTO) %>% 
  select(PROMMATEMATICA:PROMCOMPETENCIASCIUDADAN) %>%
  summarise_if(is.numeric,mean)

Combinación de manejo de datos

Icfes2 %>%
  mutate(promTotal = rowMeans(.[10:16])) %>%
  group_by(CODIGOMUNICIPIO) %>%
  arrange(desc(promTotal)) %>%
  select(NOMBREINSTITUCION, NOMBREMUNICIPIO, DEPARTAMENTO, promTotal) %>%
  slice(1:3)

¿Cuántas Instituciones Educativas tiene cada municipio?

Icfes2 %>%
  group_by(CODIGOMUNICIPIO, NOMBREMUNICIPIO, DEPARTAMENTO) %>%
  summarise(n = n()) %>%
  select(DEPARTAMENTO, NOMBREMUNICIPIO, n) %>%
  group_by(DEPARTAMENTO) %>%
  arrange(desc(n))
library(ggplot2)
Icfes2 %>% 
  ggplot(aes(x = PROMLECTURACRITICA,y = PROMMATEMATICA,
             fill=JORNADA,colour=JORNADA))+
  geom_point()

Icfes2 %>% 
  ggplot(aes(x = PROMLECTURACRITICA,y = PROMMATEMATICA,
             fill=JORNADA,colour=JORNADA))+
  geom_point()+facet_grid(CALENDARIO~NATURALEZA)+
  theme_bw()

Icfes2 %>% 
  ggplot(aes(y = PROMMATEMATICA,x=DEPARTAMENTO,
             fill=DEPARTAMENTO))+
  geom_boxplot()+ theme(legend.position = "none",
                        axis.text.x = element_text(angle = 90))